home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr26 / netprog.zip / NETPROG.TAR / lock / locksem.c < prev    next >
C/C++ Source or Header  |  1989-12-17  |  751b  |  40 lines

  1. /*
  2.  * Locking routines using semaphores.
  3.  */
  4.  
  5. #include    <sys/types.h>
  6. #include    <sys/ipc.h>
  7. #include    <sys/sem.h>
  8.  
  9. #define    SEMKEY    123456L    /* key value for semget() */
  10. #define    PERMS    0666
  11.  
  12. static struct sembuf    op_lock[2] = {
  13.     0, 0, 0,    /* wait for sem#0 to become 0 */
  14.     0, 1, 0        /* then increment sem#0 by 1 */
  15. };
  16.  
  17. static struct sembuf    op_unlock[1] = {
  18.     0, -1, IPC_NOWAIT    /* decrement sem#0 by 1 (sets it to 0) */
  19. };
  20.  
  21. int    semid = -1;    /* semaphore id */
  22.  
  23. my_lock(fd)
  24. int    fd;
  25. {
  26.     if (semid < 0) {
  27.         if ( (semid = semget(SEMKEY, 1, IPC_CREAT | PERMS)) < 0)
  28.             err_sys("semget error");
  29.     }
  30.     if (semop(semid, &op_lock[0], 2) < 0)
  31.         err_sys("semop lock error");
  32. }
  33.  
  34. my_unlock(fd)
  35. int    fd;
  36. {
  37.     if (semop(semid, &op_unlock[0], 1) < 0)
  38.         err_sys("semop unlock error");
  39. }
  40.